# 用space_price.txt进行房价预测
# 1、	获取文件数据 （10分）
from sklearn.datasets import load_boston
data = load_boston()

# 2、	第一列为x，第二列为y，进行数据切分（10分）
x = data.data
y = data.target

# 3、	使用留出法，将数据分为训练集和测试集（10分）
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.7, random_state=666)

# 4、	将特征进行标准化处理（10分）
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.fit_transform(x_test)

# 5、	创建线性回归模型（使用L2正则）（10分）
from sklearn.linear_model import Ridge
estimator = Ridge()

# 6、	使用不同lambda数值计算0.01, 0.05,0.1,0.3,0.6,1（10分）
params = {'alpha': [0.01, 0.05,0.1,0.3,0.6,1]}
from sklearn.model_selection import GridSearchCV
gscv = GridSearchCV(estimator, params, cv=10, iid=True)
gscv.fit(x_train, y_train)

# 7、	输出最优数值（10分）
print(f'最优数值: {gscv.best_params_}')
print(f'Best score: {gscv.best_score_}')

# 8、	打印预测值（10分）
model = Ridge(**(gscv.best_params_))
model.fit(x_train, y_train)
print('预测值')
h_test = model.predict(x_test)
print(h_test[:5])

# 9、	打印权重和截距（10分）
print(f'权重:{model.coef_}')
print(f'截距:{model.intercept_}')

# 10、	打印R方，mse，mae数据值（10分）
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error
print(f'R方数据值: {r2_score(y_test, h_test)}')
print(f'mse数据值: {mean_squared_error(y_test, h_test)}')
print(f'mae数据值: {mean_absolute_error(y_test, h_test)}')
